 /* 
    在这里定义和用户相关的路由处理函数,供/router/user.js模块进行调用
 */

    // 导入数据库操作模块
const db = require('../../db/index')
    
/*  bcryptjs 对用户密码进行加密 
加密之后的密码，无法被逆向破解
同一明文密码多次加密，得到的加密结果各不相同，保证了安全性
*/

    const bcrypt = require('bcryptjs')
    /* 导入jsonewebtoken包 */
    // 这个包生成Token字符串
    const jwt = require('jsonwebtoken')
    // 导入config
    const config = require('../../config/config')
   
// 注册用户的处理函数
  const reguser = (req,res)=>{
    let sql =  'select * from en_users where username=?'
    const userinfo =  req.body
    // 对用户的密码,进行 bcrype 加密，返回值是加密之后的密码字符串
    userinfo.password = bcrypt.hashSync(userinfo.password,10)
    if(!userinfo.username || !userinfo.password){
        return res.send({
            status:1,
            message:'error'
        })
    }
    // 执行sql语句是否被占用
    db.query(sql,[userinfo.username],(err,results)=>{
        if(err){
            return res.send({
                status:1,
                message:err.message
            })
        }
        // 用户名被占用
        if(results.length > 0){
            return res.send({
                status:1,
                message:'用户名被占用'
            })
        }
    })
    const sql2 = 'insert into en_users set ?'
    db.query(sql2,{username:userinfo.username,password:userinfo.password},(err,result)=>{
        if(err) {
            console.log('数据username重复');
            return res.send({status:1,message:err.message})
    }
        // 注册成功了,但是行数不为1
        if(result.affectedRows !==1){
            return res.send({status:1,message:'注册失败,请稍后再试'})          
        }
         /* 注册成功 */
    res.send({
        code:200,
        status:0,
        message:'success',
        data:{

        }
    })
    })
   
}
// 登录模块函数
const login = (req,res)=>{
    const userinfo = req.body
   const sql = 'select * from en_users where username=?'
   db.query(sql,req.user.id,(err,results)=>{
    if(err) return res.cc(err)
    if(results.length !==1) return res.cc('登录失败')
    const comPareResult = bcrypt.compareSync(results[0].username,results[0].password)
    if(comPareResult){
        return res.cc('登录失败')
    }
    // 登录成功,生成token值
    const user = {...results[0],password:'',user_pic:''}
     /* 生成token字符串响应给客户端 */
     const tokenStr = jwt.sign(user,config.jwtSecreKey,{
        expiresIn:'10h'//token有效期为10h
    })
     res.send({
        code:200,
        status:0,
        message:'success',
        // 为了方便客户端使用 Token，在服务器端直接拼接上 Bearer 的前缀
        token:'Bear'+tokenStr,
        data:{}
    })
   })
}
// 个人中心模块函数
const getUserInfo = (req,res)=>{
    // 根据用户的 id，查询用户的基本信息
// 注意：为了防止用户的密码泄露，需要排除 password 字段
    const sql = 'select id, username, nickname, email, user_pic from en_users where id=?'
    // 注意：req 对象上的 user 属性，是 Token 解析成功，express-jwt 中间件帮我们挂载上去的
    db.query(sql,(err,results)=>{
        if(err) return res.cc(err)
        if(results.length !== 1) return res.cc('获取用户信息失败')
        res.send({
            status:0,
            message:'success',
            code:200,
            data:results[0]
        })
    })
   
} 
module.exports = {
    reguser:reguser,
    login:login,
    getUserInfo:getUserInfo
}